﻿using ProductMonitor.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace ProductMonitor.UserControls
{
    /// <summary>
    /// RaderUC.xaml 的交互逻辑
    /// </summary>
    public partial class RaderUC : UserControl
    {
        public RaderUC()
        {
            InitializeComponent();

            SizeChanged += OnSizeChanged; // 订阅 OnSizeChanged 事件
        }
        // 当控件大小改变时触发的事件处理方法
        private void OnSizeChanged(object sender, SizeChangedEventArgs e)
        {
            DrawRader(ItemSource); // 当控件大小改变时重新绘制雷达图
        }

        // 定义依赖属性 ItemSource，用于绑定雷达图的数据源 propdp
        public static readonly DependencyProperty ItemSourceProperty =
            DependencyProperty.Register("ItemSource", typeof(List<ReaderModel>), typeof(RaderUC));

        // 数据源，支持数据绑定。依赖属性
        public List<ReaderModel> ItemSource// 雷达变量名称
        {
            get { return (List<ReaderModel>)GetValue(ItemSourceProperty); } // 获取依赖属性 ItemSource 的值
            set { SetValue(ItemSourceProperty, value); } // 设置依赖属性 ItemSource 的值
        }
      
     
        //画图方法
        public void DrawRader(List<ReaderModel> itemSource)
        {
            // 检查数据源是否为空或长度为0
            if (itemSource == null || itemSource.Count == 0)
            {
                MessageBox.Show("数据源不能为空或长度为0！", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            // 清除之前的图形
            P1.Points.Clear();
            P2.Points.Clear();
            P3.Points.Clear();
            P4.Points.Clear();// 清除多边形的点
            P5.Points.Clear();
            

            // 获取控件的宽度和高度(正方形)
            double size = Math.Min(MyRaderCanvas.ActualWidth, MyRaderCanvas.ActualHeight);// 获取控件的最小边长作为雷达图的大小
            double centerX = MyRaderCanvas.ActualWidth / 2;// 获取控件的中心点X坐标
            double centerY = MyRaderCanvas.ActualHeight / 2 - 40;//获取控件的中心点y坐标,向上移动40像素
            double scale = 0.5;//// 缩放比例，0.6表示缩小到60%
            double radius = (size / 2 - 20) * scale;// 这里的 20 是边距，size / 2 决定了雷达图最大能占据的空间。
            double step = 360.0 / itemSource.Count;// 计算每个数据点之间的角度间隔

            for (int i = 0; i < itemSource.Count; i++)// 遍历数据源中的每个数据点
            {
                double radians = (step * i - 90) * Math.PI / 180.0;// 将角度转换为弧度
                double x = centerX + radius * Math.Cos(radians);// 计算点的X坐标
                double y = centerY + radius * Math.Sin(radians);// 计算点的Y坐标
                P1.Points.Add(new Point(x, y));
                P2.Points.Add(new Point(centerX + radius * 0.75 * Math.Cos(radians), centerY + radius * 0.75 * Math.Sin(radians)));// 添加多边形的点
                P3.Points.Add(new Point(centerX + radius * 0.5 * Math.Cos(radians), centerY + radius * 0.5 * Math.Sin(radians)));// 添加多边形的点
                P4.Points.Add(new Point(centerX + radius * 0.25 * Math.Cos(radians), centerY + radius * 0.25 * Math.Sin(radians)));
                P5.Points.Add(new Point(centerX + radius * itemSource[i].Value * 0.01 * Math.Cos(radians), centerY + radius * itemSource[i].Value * 0.01 * Math.Sin(radians)));//数据原点

                // 文字处理
                TextBlock textBlock = new TextBlock
                {
                    Text = itemSource[i].ItemName,// 设置文本为数据点的名称
                    Width = 60,
                    FontSize = 12,
                    FontWeight = FontWeights.Bold,
                    HorizontalAlignment = HorizontalAlignment.Center,
                    Foreground = new SolidColorBrush(Colors.Red)// 设置文本颜色为红色
                };
                textBlock.SetValue(Canvas.LeftProperty, centerX + (radius + 10) * Math.Cos(radians) - 30);// 设置文本的X坐标，使其居中
                textBlock.SetValue(Canvas.TopProperty, centerY + (radius + 10) * Math.Sin(radians) - 7);// 设置文本的Y坐标，使其居中
                MyRaderCanvas.Children.Add(textBlock);// 将文本块添加到画布中
            }
        }
    }
}
